package cn.net.lwj.common.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.doomdark.uuid.UUIDGenerator;

public class StringUtil {
    /**
     * 是否匹配
     * @param regex
     * @param input
     * @return
     */
    public static boolean matcher(String regex, String input, String msg) {
        Matcher m = Pattern.compile(regex).matcher(input);
        if (m.find()) {
            return true;
        }
        if (msg != null && !"".equals(msg)) {
            System.err.println(msg.replace("@REPLACE@", input));
        }
        return false;
    }

    public static boolean matcher(String regex, String input) {
        Matcher m = Pattern.compile(regex).matcher(input);
        return m.find();
    }

    /**
     * 根据正则表达式得到某一匹配组匹配内容,返回map
     * @param regEx
     * @param str
     * @return
     */
    public static Map<String, String> getContents(String regEx, String str) {
        List<String> groups = getBhqList(regEx);
        Map<String, String> map = new HashMap<>();
        Matcher m = Pattern.compile(regEx).matcher(str);
        try {
            if (m.find()) {
                map.put("all", m.group());
                for (String group : groups) {
                    map.put(group, m.group(group));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return map;
    }

    /**
     * 获取正则表达式中捕获组的名称集合
     * @param regEx
     * @return
     */
    public static List<String> getBhqList(String regEx) {
        String reg = "\\(\\?<(?<group>\\w{1,15})>";
        Matcher matcher = Pattern.compile(reg).matcher(regEx);
        List<String> groups = new ArrayList<>();
        while (matcher.find()) {
            groups.add(matcher.group("group"));
        }
        return groups;
    }

    /**
     * 根据正则表达式得到匹配内容  只有一次的情况
     * @param regEx
     * @param str
     * @return
     */
    public static String getContent(String regEx, String str) {
        String content = "";
        Matcher m = Pattern.compile(regEx).matcher(str);
        if (m.find()) {
            content = m.group();
        }
        return content;
    }
    /**
     * 根据正则表达式得到某一匹配组匹配内容
     * @param regEx 正则
     * @param str 原文件
     * @param group 捕获组名
     * @return
     */
    public static String getContent(String regEx, String str,String group) {
        String content = "";
        Matcher m = Pattern.compile(regEx).matcher(str);
        try {
            if (m.find()) {
                content = m.group(group);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return content;
    }

    /**
     * 根据正则表达式得到某一匹配组匹配内容
     * @param regEx 正则
     * @param str 原文件
     * @param groups 捕获组名
     * @return
     */
    public static String[] getContent(String regEx, String str,String... groups) {
        String[] contents = new String[groups.length];
        Matcher m = Pattern.compile(regEx).matcher(str);
        try {
            if (m.find()) {
                for (int i = 0; i < groups.length; i++) {
                    contents[i] = m.group(groups[i]);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return contents;
    }


    /**
     * 生成uuid
     * @param fyjbm
     * @return
     */
    public static synchronized String createId(String fyjbm) {
        fyjbm = fyjbm == null || fyjbm.trim().equals("") ? "0" : fyjbm;
        return fyjbm + UUIDGenerator.getInstance().generateRandomBasedUUID().toString();
    }

    public static synchronized String createId() {
        return createId(null);
    }
}
